package datatype;

/**-
 * indent（1）
 * @author LYW 
 * 数据类型包括 整型 byte -1 short-2 int-4 long-8 浮点型 float-4 double-8 字符型
 *        字符型 char -2 布尔类型 boolean true 、 false
 *强制转换 竟然能溢出转换
 *
 *char类型不能自动转换为short类型，因为char是无符号整数，short是有符号的
 *
 */
public class BisicDataType {

	public static void main(String[] args) {
		
		//定义一个整型变量	，整型数值默认为int类型
		int iAge1 = 30;
		System.out.println("iAge1的年龄是"+iAge1);
		
		//定义一个byte类型的，将一个整型数赋给它
		byte iAge2 = 20;
		System.out.println("iAge2的年龄是"+iAge2);
		
		//定义一个byte变量，超出范围赋值的提示错误
		//Type mismatch: cannot convert from int to byte
		//byte iAge5 = 355;
		
		//定义一个大数long类型赋给int或更小的数
		//会提示out of range
		//int iAge3 = 899999998829;
		
		//定义一个long型变量，并赋值
		long lAge4 = 899989892839L;
		
		//定义一个float类型变量
		// cannot convert from double to float
		//不能直接转
		//float fprice1 = 555.1;
		float fprice2 = 55.1f;
		
		//定义一个double类型的浮点数
		double dprice1 = 30.345;
		System.out.println("fprice2 "+ fprice2+" dprice1 "+dprice1);
		
		//定义一个char变量，取值范围英文字母、中文、数字、转义序列、特殊字符等
		char chPara1 = 'A';
		//不能直接将数值赋给char变量，只能用unicode
		//char chPara2 = '\\85';
		char chPara2 = '\u0035';
		char chPara3 = '中';
		char chPara4 = '\b';//转义字符
		
		//输出以上四个char变量
		System.out.println("chPara1显示的字符为"+chPara1);
		System.out.println("chPara2为unicode\\u0035,显示的字符为"+chPara2);
		System.out.println("chPara3显示的字符为"+chPara3);
		System.out.println("chPara4显示的字符为"+chPara4+"这是换行的转义字符");
		//我想显示A在ASCII表中的数值，用下面的方式输出
		System.out.println("chPara1在ASCII码对应的数值"+(chPara1+0));
		
		//定义两个布尔类型变量
		boolean isOK = true;
		boolean isNG = false;
		
		//输出两个布尔类型变量
		System.out.println("布尔类型的两个数值是 isOK = " + isOK + " , isNG = " + isNG);
		
		
		/*-
		 * indent(2)
		 * 
		 *转换
		 *小转大-从低级到高级自动转换
		 *大转小-从高级到低级强制转换（类型） 精度丢失
		 * char-int 自动转换
		 * 整型自动向浮点型转换
		 * */
		
		//自动转换
		byte bData = 98;
		short sData = bData;
		char chData = (char) bData;
		int iData1 = sData;
		int iData2 = chData;
		long lData = iData1;
		//输出以上结果
		System.out.println("byte"+bData+"short"+sData+"char"+(chData+0)+"int"+iData1+"long"+lData);
		
		//取值范围内的强制转换
		lData = 23;
		iData1 = (int)lData;
		sData = (short)iData1;
		bData = (byte)lData;
		chData = (char)lData;
		//输出以上几个变量
		System.out.println("byte"+bData+"short"+sData+"char"+(chData+0)+"int"+iData1+"long"+lData);
		
		//整型除法 小数部分自动舍弃
		System.out.println("====================");
		int iData3 = 4;
		int iData4 = 3;
		int iData5 = iData3 / iData4;
		System.out.println("整型除法 int iData5 = "+iData5);
		//整型除法 得到的是整数int ，能自动转换为double，先计算右部得2，所以转换为浮点型为2.0
		System.out.println("====================");
		iData3 = 4;
		iData4 = 3;
		double dData5 = iData3 / iData4;
		System.out.println("整型除法 double dData5 = "+dData5);
		//操作数iData3*1.0将这个表达式转换为double类型，所以整个运算结果为浮点型数2.33……
		System.out.println("====================");
		iData3 = 7;
		iData4 = 3;
		dData5 = (iData3*1.0) / iData4;
		System.out.println("整型除法double dData5 = "+dData5);
		
		
		//强制转换 溢出转换
		//
		byte iLength = (byte)300;
		short iWidth = (byte)40000;
		System.out.println("长度"+iLength+"宽度"+iWidth);
		//
		byte bData1 = 3;
		byte bData2 = 4;
		short sData1 =(short) (bData1 + bData2);
		int iData6 = iData3 + iData4;
		System.out.println(sData1+"  "+iData6);
		
		//
		char chDa1 = 'a';
		char chDa2 = 'b';
		char chDa3 =(char)(chDa1+chDa2);
		System.out.println(chDa3);
		
	}

}
